//
// Created by Jisam on 31/08/2024 4:19 AM.
// Solution of  P1019 [NOIP2000 提高组] 单词接龙
// 2024-08-31 04:53:08  AC 100
//#pragma GCC optimize(3)
#include <bits/stdc++.h>

using namespace std;
#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
typedef long long i64;
typedef unsigned u32;
typedef unsigned long long u64;
typedef __int128 i128;
int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1,};
int dy[] = {0, 0, -1, 1, 1, -1, -1, 1,};
const int MAXN = 100;
string a[MAXN];
int ans,cnt[MAXN];
int n;
/**
 * 在两个字符串中，查找s2在s1中的最长后缀
 * @param s1 第一个字符串
 * @param s2 第二个字符串
 * @return 返回s2在s1中的最长后缀的长度，如果没有找到返回0
 */
int getsame(string s1, string s2){
    // 从s1的末尾开始查找s2的起始字符
    for(int i = s1.length() - 1; i >= 0; i--){
        // 如果找到匹配的起始字符
        if(s1[i] == s2[0]){
            // 从当前字符开始，与s2进行逐字符比较
            int l = i;
            for(int j = 0; j < s2.length(); j++){
                // 如果当前字符匹配
                if(s1[l] == s2[j]){
                    l++;
                }
                else{
                    // 如果当前字符不匹配，跳出循环继续寻找下一个可能的起始字符
                    break;
                }
            }
            // 如果l等于s1的长度，说明s2已经在s1中完全匹配
            if(l == s1.length()){
                // 返回s2在s1中的最长后缀长度
                return l - i;
            }
        }
    }
    // 如果没有找到匹配，返回0
    return 0;
}

void dfs(int i,string cur){
    ans = max(ans,(int)cur.length() - i);
    for(int j = 0 ; j < n ; j ++){
        if(cnt[j] == 2)continue;
        int same = getsame(cur,a[j]);
        if(same == 0){
            continue;
        }
        cnt[j] ++;
        dfs(i + same,cur+ a[i]);
        cnt[j] --;
    }

}
void solution() {
    cin >> n;
    for(int i = 0 ; i < n ; i ++){
        cin >> a[i];
    }
    string s;
    cin >> s;
    dfs(0,s);
    cout << ans;

}

int main() {
    code_by_jisam;
    int T = 1;
//    cin >> T;
    while (T--) {
        solution();
    }
    return 0;
}